import { useTypedDispatch, useTypedSelector } from "@store/index";
import { guestChannelSelectors, saveGuestChannels, } from "@slice/guestChannel";
import { useRequestGuestChannelsMutation } from "@service/channel";
import { useEffect } from "react";

export default function useGuestChannels() {
    // 获取本地访客频道列表
    const guestChannels = useTypedSelector(guestChannelSelectors.selectAll);
    // 获取本地访客列表数量
    const guestChannelTotal = useTypedSelector(guestChannelSelectors.selectTotal)
    // 用于获取服务端访客频道列表
    const [requestGuestChannels, { data, isSuccess }] = useRequestGuestChannelsMutation();
    // 获取 dispatch 方法
    const dispatch = useTypedDispatch();

    // 检测本地是否存在访客频道列表
    useEffect(() => {
        // 如果本地存在访客频道列表阻止当前代码继续运行
        if (guestChannelTotal !== 0) return;
        // 本地不存在访客频道列表则向服务端请求访客频道列表
        requestGuestChannels(undefined);
        // 运行依赖项列表
    }, [guestChannelTotal, requestGuestChannels]);

    // 检测服务端访客频道列表是否获取成功
    useEffect(() => {
        // 如果服务端访客频道列表获取成功
        if (isSuccess && typeof data !== "undefined") {
            // 将服务端访客频道列表保存到本地
            dispatch(saveGuestChannels(data.data.channels));
        }
    }, [isSuccess, data, dispatch]);

    // 返回访客频道列表
    return guestChannels;
}